// pages/cart/index.js
import {showModal,showToast}from "../../utils/asyncWx"

Page({

    /**
     * 页面的初始数据
     */
    data: {
        address:{},
        cart:[],
        allchecked:false,
        totalPrice:0,
        totalNum:0
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {

    },

    /* 返回购物车时都会重新加载数据(新加入的商品) */
    onShow(){
        /* 一返回都会刷新地址 */
        const address = wx.getStorageSync("address");
        if(address.userName){
            address.all = address.provinceName+address.cityName+address.countyName+address.detailInfo
        }
        /* 获取缓存中的购物车数据 */
        const cart = wx.getStorageSync("cart") || [];
        
        /* 计算全选  every数组方法 会遍历 接收一个回调函数
        每一个回调函数都返回true 若有一个回调函数返回了false 则终止遍历 返回false
        空数组调用every也返回true */
        // const allchecked = cart.length ? cart.every(v=>v.checked) : false;
        
        this.setData({address})
        this.setCart(cart)
    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {

    },

    handleChooseAddress(){
        //微信内置api 获取用户的收货地址
        wx.chooseAddress({
            success: (result)=>{
                wx.setStorageSync("address", result);
            },
            fail: ()=>{},
            complete: ()=>{}
        });
    },

    /* 购物车商品数据修改（一点击复选框就会触发） */
    handleItemChange(e){
        /* 获取被修改的商品id */
        const goods_id = e.currentTarget.dataset.id;
        console.log(goods_id);
        /* 获取购物车数组 */
        let {cart} = this.data;
        /* 找到被修改的商品对象 */
        let index = cart.findIndex(v=>v.goods_id===goods_id);
        /* 选中状态取反 */
        cart[index].checked=!cart[index].checked;
        /* 把购物车数据重新设置回data和缓存中 */

        this.setCart(cart)
    },

    /* 设置购物车状态同时 重新计算底部工具栏的数据 */
    setCart(cart){
        this.setData({
            cart
        })
        let allchecked=true
        wx.setStorageSync("cart", cart);
        /* 计算总价格 */
        let totalPrice = 0;
        let totalNum = 0;
        if(cart.length===0){
            allchecked = false
        }else{
            cart.forEach(v=>{
                if(v.checked){
                    totalNum+=v.num;
                    totalPrice+=v.num*v.goods_price
                }else allchecked = false
            })
        }

        this.setData({
            totalPrice,
            totalNum,
            allchecked
        })
    },
    /* 商品的全选 */
    /* 不知道为啥 不可以通过this.data.。。。来修改里边的数据（只能读取
        只能通过setData来修改
     */
    handleItemAllChecked(){
        let {cart , allchecked} = this.data;
        allchecked=!allchecked;
        cart.forEach(v=>v.checked=allchecked)
        this.setCart(cart)
    },

    /* 商品数量的编辑功能 */
    async handleItemNumEdit(e){
        const {operation , id} = e.currentTarget.dataset
        /* 获取购物车数组 */
        let {cart} = this.data
        /* 找到需要修改的商品的索引 */
        const index = cart.findIndex(v=>v.goods_id===id)
        if(cart[index].num === 1 && operation === -1){
            let res = await showModal({content: "您是否要删除"});
            if(res.confirm){
                cart.splice(index,1);
                this.setCart(cart);
            }
        }
        else {
            cart[index].num += operation;
            this.setCart(cart)
        }
    },

    /* 结算 */
    async handlepay(){
        const {address , totalNum} = this.data;
        if(!address.userName){
            await showToast({title:"您还没有选择收货地址"})
            return
        }else {
            if(totalNum === 0) {
                await showToast({title:"您还没选择商品"})
                return
            }else {
                wx.navigateTo({
                    url: '/pages/pay/index',
                });
            }
        }
    }
})